home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / lu62 / debug / ftt5.c < prev    next >
C/C++ Source or Header  |  1996-07-10  |  10KB  |  344 lines

  1. /*
  2.  *  CopyRight 1995. Nicholas Poljakov all rights reserved.
  3.  */
  4. #include <bios.h>
  5. #include <stdio.h>
  6. #include <ctype.h>
  7. #include <dos.h>
  8. #include <stdlib.h>
  9. #include <conio.h>
  10. #include <string.h>
  11. #include <state1.h>
  12.  
  13.  
  14. #define BORDER 1
  15. #define REV_VID 0x70
  16. #define NORM_VID 0x1E
  17. #define MAX_FRAME 31
  18. #define BKSP 8
  19. #define F1 59
  20. #define F2 60
  21. #define F3 61
  22. #define F4 62
  23. #define F5 63
  24. #define F6 64
  25. #define F7 65
  26. #define F8 66
  27. #define F9 67
  28. #define F10 68
  29. #define HM  71   /* Home key     */
  30. #define UP  72   /* Up Arrow     */
  31. #define PU  73   /* Page Up      */
  32. #define LT  75   /* Left Arrow   */
  33. #define RT  77   /* Right Arrow  */
  34. #define END 79   /* End key      */
  35. #define DN  80   /* Down Arrow   */
  36. #define PD  81   /* Page Down    */
  37. #define ESC '\033'
  38. #define DIR 0x10
  39.  
  40. #define ROWS1 19
  41. #define ROWS2 23
  42. #define ROWS  25
  43. #define COLS 78
  44. #define L_W 20
  45. #define M_W 36
  46. #define R_W 20
  47. #define SCRNSIZE ((ROWS)*(COLS+2)*2)
  48. #define LAST (24 * 80)*2
  49.  
  50. #define M0C  4     /* Files maping col.s */
  51. #define M0L  14    /* Files maping rows  */
  52. #define M0F (((80 * 5) + 9)) * 2
  53. #define INTR 18*2
  54.  
  55. extern unsigned int attr1b;
  56. extern unsigned int *ptrs;
  57. extern int size;
  58. extern unsigned char row, col;
  59. extern int adapter;
  60. extern unsigned char far *videomem;
  61. extern int offset;
  62. extern int sw;
  63. extern char *path;
  64. extern char file[12];
  65. extern char tpname[31];
  66. extern char luname[8];
  67. extern char lu_id[8];
  68. extern char mode_name[8];
  69. extern char rcv_file[12];
  70. extern char tp_exist; /* Tp_exist eq. 0 if TP not active, and 1 vice versus.*/
  71. extern char dta[128];
  72. extern char far *vid_mem;
  73. extern short cur_ln;
  74. extern struct  part {            /* partner structure */
  75.           char     plu[8] ;         /* str plu_name        */
  76.                   int psl;                    /* str plu_s_limit     */
  77.           char     mode_name[8] ;         /* str mode_name        */
  78.                   int max_ru_size;            /* str ru_h_size       */
  79.                   int pacing;                 /* str =               */
  80.                   unsigned char lu_type;
  81.                }  pstr[4];
  82.  
  83. extern struct menu_frame {
  84.     int startx, endx, starty, endy;
  85.     unsigned char *p;
  86.     char **menu;
  87.     char *keys;
  88.     int border;
  89.     int count;
  90.     unsigned char attrib;
  91.     int active;
  92.     int curx, cury;
  93.     char *header;
  94.     } frame[MAX_FRAME];
  95.  
  96. extern struct APL_PARM{
  97.        int status;  /* 0-start aplmain,1-start transaction,2-dos shell */
  98.        char p[80];  /* string for system(p) */
  99.        char args[40];/* string of arguments */
  100.        int rc;      /* aplmain return code */
  101.        char dir[60];/* directory name for aplmain */
  102.        int drlen;   /* directory name length */
  103.        void *tpe;   /* entry of exit program */
  104.        char pgm_state;
  105. }*p_aparm;
  106.  
  107. extern char p_dcl[21];
  108. extern unsigned char dr_ind[80];
  109. extern char c_pt[60];
  110. extern int drive_ind[10];
  111. extern char tp_id[8];
  112. extern unsigned  long conv_id;
  113.  
  114. em_tty()
  115. {
  116.     char ts[30];
  117.     char tpn[8];
  118.     unsigned int ch;
  119.     char buff[80];
  120.     char retstr[8];
  121.     int i;
  122.     short cnt;
  123.     unsigned char rts;
  124.     unsigned char wr;
  125.     unsigned int max_length ;
  126.     unsigned long rc;
  127.     struct rc {
  128.                 unsigned int prim;
  129.                 unsigned long sec;
  130.               } v_rc;
  131.     struct msg {  /*send_data*/
  132.                 int len;
  133.                 char str[134];
  134.                } gds;
  135.     char p_lu[9];
  136.     char p_mode[9];
  137.     int length;
  138.     unsigned key;
  139.  
  140.     window(10);
  141.     window_xy(10, 1, 1);
  142.     window_puts(10, "F1 -  Help");
  143.     window_xy(10, 2, 1);
  144.     window_puts(10, "F10 - Exit");
  145.     window_xy(10, 1, 56);
  146.     strcpy(ts, "LU partner: ");
  147.     strcat(ts, pstr[cur_ln].plu);
  148.     window_puts(10, ts);
  149.     window(11);
  150.     if (pstr[cur_ln].lu_type != 6) {
  151.         window(14);
  152.     window_xy(14, 2, 0);
  153.         window_puts(14, "The current LU has inproper type!");
  154.         window_xy(14, 3, 4);
  155.         window_puts(14, "Press ESC to continue");
  156.         while ((ch = getch()) != ESC) ;
  157.         deactivate(14);
  158.         goto Em_exit;
  159.     }
  160.     if (p_aparm -> pgm_state) {  /* Remote control */
  161.     window_xy(10, 3, 1);
  162.     window_puts(10, "Receive state. Wait for a message please.");
  163.         goto ReRead;
  164.     }
  165.     if (!tp_exist) {
  166.         tp_started
  167.                  (lu_id,
  168.                   tp_id,
  169.                   &rc);
  170.         if (rc != 0) {
  171.             window_xy(20, 6, 1);
  172.             window_puts(20, "TP_started failure. Press ESC to exit.");
  173.         goto Em_exit;
  174.     }
  175.     tp_exist = 1; /* TP_started O.K! */
  176.     }
  177.  
  178.     strcpy (tpn,"TTY "); /* name of work */
  179.     /*conv_id - return param -id work link */
  180.     strcpy(p_lu, pstr[cur_ln].plu);
  181.     strcpy(p_mode, pstr[cur_ln].mode_name);
  182.     allocate  (p_lu,
  183.                p_mode,
  184.                tpn,
  185.                WHEN_SESSION_ALLOCATED,
  186.                NONE,
  187.                NONE,
  188.                NULL,
  189.                NULL,
  190.                tp_id,
  191.                &conv_id,
  192.                NULL,
  193.                &v_rc) ;
  194.  
  195.     if (v_rc.prim != 0) {
  196.     window_xy(10, 3, 1);
  197.         window_puts(10, "Allocation failure. Press ESC to exit.");
  198.         while ((ch = getch()) != ESC) ;
  199.         goto Em_exit;
  200.     }
  201.  
  202.     ReSend:
  203.     window_xy(10, 3, 1);
  204.     window_puts(10, "Send state. Please enter the message...   ");
  205.     while (buff[0] != 0x00) {
  206.            window_xy(11, 16, 1);
  207.            if (window_gets(11, buff) == 1) {
  208.                deallocate (tp_id,
  209.                            conv_id,
  210.                            Flush,
  211.                            &v_rc);
  212.                goto Em_exit;
  213.            }
  214.            if (buff[0] == 0x00)
  215.                continue;
  216.            i = strlen(buff);
  217.            strcpy(gds.str, buff) ;
  218.            gds.len = i + 2;
  219.            length=gds.len;
  220.            send_data(tp_id,
  221.                      conv_id,
  222.                      &gds,
  223.                      0,
  224.                      0,
  225.                      length,
  226.                      &v_rc,
  227.                      &rts);
  228.            if (v_rc.prim != 0) {
  229.                window(14);
  230.                window_xy(14, 1, 4);
  231.                window_puts(14, "Return code from send");
  232.                sprintf(retstr,"%x", v_rc.prim);
  233.                i = (30 - strlen(retstr))/2;
  234.                window_xy(14, 2, i);
  235.                window_puts(14, retstr);
  236.                while ((ch = getch()) != ESC) ;
  237.                deactivate(14);
  238.            goto Em_exit;
  239.            }
  240.            scrollw(11);
  241.     }
  242.     if (buff[0] == 0x00) {
  243.     window_xy(10, 3, 1);
  244.         window_puts(10, "Receive state. Wait for a message please.  ");
  245.     ReRead:
  246.         if (_bios_keybrd( _KEYBRD_READY ) != 0) {
  247.             key = _bios_keybrd( _KEYBRD_READ );
  248.             key &= 0x00ff;
  249.             if (key == 27) {
  250.                 deallocate (tp_id, conv_id, abend_prog ,&v_rc);
  251.                 goto Em_exit;
  252.             }
  253.         }
  254.         switch (GetMsg(buff)) {
  255.         case -1 :
  256.                window_xy(10, 3, 1);
  257.                            window_puts(10, "Read error... Press ESC to exit.         ");
  258.                            while ((ch = getch()) != ESC) ;
  259.                            goto Em_exit;
  260.         case  0 :
  261.                            window_xy(11, 16, 1);
  262.                            window_puts(11, buff);
  263.                            scrollw(11);
  264.                            goto ReRead;
  265.         case  1 :
  266.                window_xy(10, 3, 1);
  267.                            window_puts(10, "End of conversation. Press ESC to exit.  ");
  268.                            while ((ch = getch()) != ESC) ;
  269.                            goto Em_exit;
  270.         case  2  :
  271.                window_xy(10, 3, 1);
  272.                            goto ReSend;
  273.          }
  274.     }
  275.     goto ReSend;
  276. Em_exit:
  277.     if (p_aparm -> pgm_state) {
  278.        tp_ended (tp_id, &rc);
  279.     }
  280.     deactivate(11);
  281.     deactivate(10);
  282.     return 0;
  283. }
  284.  
  285. GetMsg(buff)
  286. char *buff;
  287. {
  288.     unsigned char rts;
  289.     unsigned char wr;
  290.     unsigned int max_length ;
  291.     int i;
  292.     char retstr[10];
  293.     struct rc {
  294.                 unsigned int prim;
  295.                 unsigned long sec;
  296.               } v_rc;
  297.     struct msg {  /*send_data*/
  298.                 int len;
  299.                 char str[134];
  300.                } gds;
  301.     char p_lu[9];
  302.     char p_mode[9];
  303.     int length;
  304.     unsigned int ch;
  305.  
  306.        max_length = 255;
  307.        recwait (tp_id,
  308.                 conv_id,
  309.                 ll,
  310.                 &v_rc,
  311.                 &length,
  312.                 max_length,
  313.                 &rts,
  314.         &gds,
  315.                 &wr);
  316.        switch (v_rc.prim) {
  317.                 case  deallocate_normal:
  318.                           return 1;   /* end of job */
  319.                 case  OK:
  320.                           gds.str[gds.len - 2] = 0x00;  /* for ASCII file only! */
  321.                           strcpy(buff, gds.str);
  322.                           break;
  323.                 default:
  324.                           window(14);
  325.                           window_xy(14, 1, 4);
  326.                           window_puts(14, "Return code from receive");
  327.                           sprintf(retstr,"%x", v_rc.prim);
  328.                           i = (30 - strlen(retstr))/2;
  329.                           window_xy(14, 2, i);
  330.                           window_puts(14, retstr);
  331.                           sprintf(retstr,"%x", v_rc.sec);
  332.                           i = (30 - strlen(retstr))/2;
  333.                           window_xy(14, 3, i);
  334.                           window_puts(14, retstr);
  335.                           while ((ch = getch()) != ESC) ;
  336.                           deactivate(14);
  337.                           return -1;   /* receive error */
  338.        }
  339.        if (wr == SenD) {
  340.           return 2;     /* change direction */
  341.        }
  342.        return 0;        /* old direction */
  343. }
  344.